use std::time::Duration;
use std::thread;
fn main() {
    // 开辟新线程
    let handle = thread::spawn(|| {
        for i in 1..10 {
            println!("hi the number {}, from spawn thread", i);
            thread::sleep(Duration::from_millis(1));
        }
    });
    for i in 1..5 {
        println!("hi the number {}, from main thread", i);
    }
    // rust中, 主线程和分线程会交替执行, 如果主线程执行完毕了, 也就不管分线程了; 一起结束
    // 所以我们可以利用JoinHandle来实现阻止主线程结束, 直到完成所有分线程的任务
    handle.join().unwrap(); // 本段代码有阻止主线程执行的作用

    // move闭包, 有的时候, 一个线程会用到另一个线程的数据, 这就要用到move闭包概念
    let v = vec![1,2,3];
    // 此处闭包要加上move, 表示借用了主线程的数据
    let handle2 = thread::spawn(move || {
        println!("the v is {:?}", v);
    });

    // 分线程中使用主线程的数据, 万一主线程结束了, 分线程还没开始呢?
    // drop(v);

    handle2.join().unwrap()
}
